// 版权所有2011 Go作者。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package types

// 一个Chan代表一种频道类型。
type Chan struct {
	dir  ChanDir
	elem Type
}

// ChanDir值表示通道方向。
type ChanDir int

// 通道的方向由以下常数之一表示。
const (
	SendRecv ChanDir = iota
	SendOnly
	RecvOnly
)

// NewChan返回给定方向和元素类型的新通道类型。
func NewChan(dir ChanDir, elem Type) *Chan {
	return &Chan{dir: dir, elem: elem}
}

// Dir返回通道c的方向。
func (c *Chan) Dir() ChanDir { return c.dir }

// Elem返回通道c的元素类型。
func (c *Chan) Elem() Type { return c.elem }

func (t *Chan) Underlying() Type { return t }
func (t *Chan) String() string   { return TypeString(t, nil) }
